perm filename VER6.DIF[TEX,DEK] blob
sn#684622 filedate 1982-10-28 generic text, type T, neo UTF8
**** File 1) TEX.WEB[TEX,DEK]/2P/15L
1) \let\mc=\ninerm % medium caps for names like PASCAL
1) \def\PASCAL{{\mc PASCAL}}
**** File 2) TEX.OLD[TEX,DEK]/2P/15L
2) \def\mc{\:\ninerm} % medium caps for names like PASCAL
2) \def\PASCAL{{\mc PASCAL}}
***************
**** File 1) TEX.WEB[TEX,DEK]/2P/19L
1) \def\MF{{\logo META}\-{\logo FONT}}
1) \def\<#1>{$\langle#1\rangle$}
**** File 2) TEX.OLD[TEX,DEK]/2P/19L
2) \def\MF{{\:\logo META}\-{\:\logo FONT}}
2) \def\<#1>{$\langle#1\rangle$}
***************
**** File 1) TEX.WEB[TEX,DEK]/3P/81L
1) @d banner=='This is TeX, Version 0.6' {printed when \TeX\ starts}
1) @ Different \PASCAL s have slightly different conventions, and the present
**** File 2) TEX.OLD[TEX,DEK]/3P/81L
2) @d banner=='This is TeX, Version 0.5' {printed when \TeX\ starts}
2) @ Different \PASCAL s have slightly different conventions, and the present
***************
**** File 1) TEX.WEB[TEX,DEK]/3P/282L
1) @!font_mem_size=15000; {number of words of |font_info| for all fonts}
**** File 2) TEX.OLD[TEX,DEK]/3P/282L
2) @!bad_font_code=300; {user font codes must be less than this}
2) @!font_mem_size=15000; {number of words of |font_info| for all fonts}
***************
**** File 1) TEX.WEB[TEX,DEK]/14P/31L
1) begin if (font(p)<font_base)∨(font(p)>font_max) then
1) print_char("*")
1) else sprint_cs(font_ident[font(p)]);
1) print_char(" "); font_in_short_display←font(p);
**** File 2) TEX.OLD[TEX,DEK]/14P/31L
2) begin print_esc(":");
2) if (font(p)<font_base)∨(font(p)>font_max) then
2) print_char("*")
2) else print_int(font_code[font(p)]);
2) print_char(" "); font_in_short_display←font(p);
***************
**** File 1) TEX.WEB[TEX,DEK]/14P/69L
1) else begin if (font(p)<font_base)∨(font(p)>font_max) then print_char("*")
1) else sprint_cs(font_ident[font(p)]);
1) print_char(" "); print_ascii(qo(character(p)));
**** File 2) TEX.OLD[TEX,DEK]/14P/70L
2) else begin print_esc(":");
2) if (font(p)<font_base)∨(font(p)>font_max) then print_char("*")
2) else print_int(font_code[font(p)]);
2) print_char(" "); print_ascii(qo(character(p)));
***************
**** File 1) TEX.WEB[TEX,DEK]/17P/113L
1) @d set_font=80 {set current font ( font identifiers )}
1) @d set_family=81 {set current family ( \.{\\fam} )}
**** File 2) TEX.OLD[TEX,DEK]/17P/113L
2) @d set_font=80 {set current font ( \.{\\:} )}
2) @d set_family=81 {set current family ( \.{\\fam} )}
***************
**** File 1) TEX.WEB[TEX,DEK]/19P/79L
1) control sequence that is perpetually undefined. There also are five
1) locations for control sequences that are perpetually defined
**** File 2) TEX.OLD[TEX,DEK]/19P/79L
2) control sequence that is perpetually undefined. There also are four
2) locations for control sequences that are perpetually defined
***************
**** File 1) TEX.WEB[TEX,DEK]/19P/87L
1) @d undefined_control_sequence=frozen_control_sequence+5 {dummy location}
1) @d glue_base=undefined_control_sequence+1 {beginning of region 3}
**** File 2) TEX.OLD[TEX,DEK]/19P/87L
2) @d undefined_control_sequence=hash_base+hash_size+4 {dummy location}
2) @d glue_base=undefined_control_sequence+1 {beginning of region 3}
***************
**** File 1) TEX.WEB[TEX,DEK]/20P/131L
1) @<Basic printing procedures@>=
1) procedure sprint_cs(@!p:pointer); {prints a control sequence}
1) var j:pool_pointer; {current character code position}
**** File 2) TEX.OLD[TEX,DEK]/20P/131L
2) @p procedure sprint_cs(@!p:pointer); {prints a control sequence}
2) var j:pool_pointer; {current character code position}
***************
**** File 1) TEX.WEB[TEX,DEK]/20P/187L
1) primitive("fam",set_family,0);@/
**** File 2) TEX.OLD[TEX,DEK]/20P/186L
2) primitive(":",set_font,0);@/
2) @!@:Single-character primitives :}{\quad\.{\\:}@>
2) primitive("fam",set_family,0);@/
***************
**** File 1) TEX.WEB[TEX,DEK]/20P/265L
1) set_family: print_esc("fam");
**** File 2) TEX.OLD[TEX,DEK]/20P/266L
2) set_font: print_esc(":");
2) set_family: print_esc("fam");
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/105L
1) |forward| procedure. A few other procedures are also declared at this point.
1) @p procedure@?scan_int; forward; {scans an integer value}
1) @t\4\4@>@<Declare procedures that scan restricted classes of integers@>@;
1) @t\4\4@>@<Declare procedures that scan font-related stuff@>
1) @ A single word `\.{\\the}' is used for integers, dimensions, and glue
**** File 2) TEX.OLD[TEX,DEK]/28P/105L
2) |forward| procedure.
2) @p procedure@?scan_int; forward; {scans an integer value}
2) @t\4\4@>@<Declare procedures that scan restricted classes of integers@>
2) @ A single word `\.{\\the}' is used for integers, dimensions, and glue
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/119L
1) ``highest'' kind of quantity that |scan_the| is allowed to produce. Seven
1) levels are distinguished, namely |int_val|, |dimen_val|, |glue_val|,
1) |mu_val|, |font_val|, |ident_val|, and |tok_val|.
1) The output of |scan_the| (and of the other routines |scan_int|, |scan_dimen|,
**** File 2) TEX.OLD[TEX,DEK]/28P/118L
2) ``highest'' kind of quantity that |scan_the| is allowed to produce. Five
2) levels are distinguished, namely |int_val|, |dimen_val|, |glue_val|,
2) |mu_val|, and |tok_val|.
2) The output of |scan_the| (and of the other routines |scan_int|, |scan_dimen|,
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/128L
1) \.{\\midmuskip}, \.{\\thickmuskip}; |font_val| is used only when |cur_val|
1) is an internal font number; |ident_val| is used only when |cur_val|
1) points to a font identifier; |tok_val| is used only when |cur_val| points
1) to |null| or to the reference count of a token list. The last three cases are
1) allowed only when |scan_the| is called with |level=tok_val|.
1) If the output is glue, |cur_val| will point to a glue specification, and
1) the reference count of that glue will have been updated to reflect this
1) reference; if the output is a nonempty token list, |cur_val| will point to
1) its reference count, but in this case the count will not have been updated.
1) Otherwise |cur_val| will contain the integer or scaled value in question.
**** File 2) TEX.OLD[TEX,DEK]/28P/127L
2) \.{\\midmuskip}, \.{\\thickmuskip}; |tok_val| is used only in cases that
2) `\.{\\the\\output}' and `\.{\\the\\everypar}' are legitimate.
2) If the output is glue, |cur_val| will point to a glue specification, and
2) the reference count of that glue will have been updated to reflect this
2) reference; if the output is a token list, |cur_val| will point to its
2) reference count, but in this case the count will not have been updated.
2) Otherwise |cur_val| will contain the integer or scaled value in question.
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/144L
1) @d font_val=4 {internal font number}
1) @d ident_val=5 {font identifier}
1) @d tok_val=6 {token lists}
1) @<Glob...@>=
**** File 2) TEX.OLD[TEX,DEK]/28P/140L
2) @d tok_val=4 {token lists}
2) @<Glob...@>=
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/198L
1) assign_toks,def_family,set_font,def_font: @<Fetch a token list or
1) font number or font identifier, provided that |level=tok_val|@>;
1) assign_int: scanned_result(int_par(m))(int_val);
**** File 2) TEX.OLD[TEX,DEK]/28P/192L
2) assign_toks: @<Fetch a token list, provided that |level=tok_val|@>;
2) assign_int: scanned_result(int_par(m))(int_val);
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/209L
1) the: begin if m>0 then negative←¬ negative;
**** File 2) TEX.OLD[TEX,DEK]/28P/202L
2) set_font: scanned_result(font_code[cur_font])(int_val);
2) def_family: @<Fetch a math font code@>;
2) the: begin if m>0 then negative←¬ negative;
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/224L
1) @ @<Fetch a token list...@>=
1) if (level≠tok_val)∨ negative then
**** File 2) TEX.OLD[TEX,DEK]/28P/219L
2) @ @<Fetch a token list, provided that |level=tok_val|@>=
2) if (level≠tok_val)∨ negative then
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/233L
1) else if cur_cmd=assign_toks then scanned_result(equiv(m))(tok_val)
1) else @<Fetch a font number or a font identifier@>
1) @ A user is allowed to refer to `\.{\\the\\spacefactor}' only in horizontal
**** File 2) TEX.OLD[TEX,DEK]/28P/228L
2) else scanned_result(equiv(m))(tok_val)
2) @ A user is allowed to refer to `\.{\\the\\spacefactor}' only in horizontal
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/295L
1) @ @<Fetch a font number...@>=
1) if cur_cmd=set_font then scanned_result(cur_chr)(font_val)
1) else if cur_cmd=def_font then scanned_result(font_ident[cur_font])(ident_val)
1) else begin scan_four_bit_int;
1) scanned_result(font_ident[equiv(m+cur_val)])(ident_val);
1) end
1) @ @<Complain that \.{\\the} can't do this; give zero result@>=
**** File 2) TEX.OLD[TEX,DEK]/28P/289L
2) @ @<Fetch a math font code@>=
2) begin scan_four_bit_int; scanned_result(font_code[equiv(m+cur_val)])(int_val);
2) end
2) @ @<Complain that \.{\\the} can't do this; give zero result@>=
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/334L
1) If |negative| is |true|, |cur_val_level| is known to be |≤mu_val|.
1) @<Fix the reference count, if any, ...@>=
**** File 2) TEX.OLD[TEX,DEK]/28P/326L
2) @<Fix the reference count, if any, ...@>=
***************
**** File 1) TEX.WEB[TEX,DEK]/28P/343L
1) else if (cur_val_level≥glue_val)∧(cur_val_level≤mu_val) then
1) add_glue_ref(cur_val)
**** File 2) TEX.OLD[TEX,DEK]/28P/333L
2) else if (cur_val_level≥glue_val)∧(cur_val_level≠tok_val) then
2) add_glue_ref(cur_val)
***************
**** File 1) TEX.WEB[TEX,DEK]/29P/41L
1) if cur_val_level≥ident_val then @<Copy the token list@>
1) else begin old_setting←selector; selector←new_string;
**** File 2) TEX.OLD[TEX,DEK]/29P/41L
2) if cur_val_level=tok_val then @<Copy the token list@>
2) else begin old_setting←selector; selector←new_string;
***************
**** File 1) TEX.WEB[TEX,DEK]/29P/51L
1) font_val: begin print(font_name[cur_val]);
1) if font_size[cur_val]≠font_dsize[cur_val] then
1) begin print(" at "); print_scaled(font_size[cur_val]);
1) print("pt");
1) end;
1) end;
1) end; {there are no other cases}
**** File 2) TEX.OLD[TEX,DEK]/29P/51L
2) end; {there are no other cases}
***************
**** File 1) TEX.WEB[TEX,DEK]/29P/63L
1) begin p←temp_head; link(p)←null;
1) if cur_val_level=ident_val then store_new_token(cs_token_flag+cur_val)
1) else if cur_val≠null then
1) begin r←link(cur_val); {do not copy the reference count}
1) while r≠null do
1) begin store_new_token(info(r)); r←link(r);
1) end;
1) end;
**** File 2) TEX.OLD[TEX,DEK]/29P/57L
2) begin r←link(cur_val); p←temp_head; link(p)←null;
2) if cur_val≠null then while r≠null do
2) begin store_new_token(info(r)); r←link(r);
2) end;
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/264L
1) When the user defines \.{\\font\\f}, say, \TeX\ assigns an internal number
1) to the user's font@@\.{\\f}. For example, if this internal number is 13,
1) we will have |font_ident[13]=p| and |equiv(p)=13|, where |p| is the |eqtb|
1) location of the control sequence@@\.{\\f}.
1) @<Types...@>=
1) @!internal_font_number=font_base..font_max; {|font| in a |char_node|}
**** File 2) TEX.OLD[TEX,DEK]/31P/264L
2) When the user defines \.{\\font 100}, say, \TeX\ assigns an
2) internal number to the user's font 100. For example, if this internal number
2) is 13, we will have |font_code[13]=100| and |font_number[100]=13|.
2) @<Types...@>=
2) @!user_font_code=0..bad_font_code; {font identification in \TeX\ input}
2) @!internal_font_number=font_base..font_max; {|font| in a |char_node|}
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/279L
1) @!font_ident:array[internal_font_number] of pointer; {the most recent user
1) font identifier corresponding to an internal font number}
1) @!font_check:array[internal_font_number] of four_quarters; {check sum}
**** File 2) TEX.OLD[TEX,DEK]/31P/279L
2) @!font_code:array[internal_font_number] of user_font_code; {the first user
2) font code corresponding to an internal font number}
2) @!font_number:array[user_font_code] of internal_font_number; {the internal
2) font number corresponding to a user's font code}
2) @!font_check:array[internal_font_number] of four_quarters; {check sum}
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/329L
1) @d bad_font_ident=frozen_control_sequence+4 {denotes a null font}
1) @<Set init...@>=
1) font_ptr←font_base; fmem_ptr←7; font_name[undefined_font]←"nullfont";
1) font_ident[undefined_font]←bad_font_ident;
1) text(bad_font_ident)←"nullfont"; eq_level(bad_font_ident)←level_one;
1) eq_type(bad_font_ident)←set_font; equiv(bad_font_ident)←undefined_font;@/
1) font_bc[undefined_font]←1; font_ec[undefined_font]←0;
**** File 2) TEX.OLD[TEX,DEK]/31P/331L
2) @<Set init...@>=
2) for k←0 to bad_font_code do font_number[k]←undefined_font;
2) font_ptr←font_base; fmem_ptr←7; font_code[undefined_font]←bad_font_code;
2) font_bc[undefined_font]←1; font_ec[undefined_font]←0;
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/423L
1) is called |read_font_info|. It has four parameters: the user font
1) identifier@@|u|, the file name and area strings |nom| and |aire|, and the
1) ``at'' size@@|s|; if |s|@@is nonzero, |read_font_info| substitutes |s| for
1) the design size. In the latter case, |s| must be positive and less than
1) 2048 (i.e., it must be less than $2↑{27}$ when considered as an integer).
1) The subroutine opens and closes a global file variable called |tfm_file|.
1) It returns the value of the internal font number that was just loaded.
1) If an error is detected, an error message is issued and no font
1) information is stored; |undefined_font| is returned in this case.
1) @d bad_tfm=11 {label for |read_font_info|}
1) @d abort==goto bad_tfm {do this when the \.{TFM} data is wrong}
1) @p function read_font_info(@!u:pointer;@!nom,@!aire:str_number;
1) @!s:scaled):internal_font_number; {input a \.{TFM} file}
1) label done,bad_tfm,not_found;
**** File 2) TEX.OLD[TEX,DEK]/31P/421L
2) is called |read_font_info|. It has four parameters: the user font code@@|u|,
2) the file name and area strings |nom| and |aire|, and the ``at'' size@@|s|;
2) if |s|@@is nonzero, |read_font_info| substitutes |s| for the design size.
2) In the latter case, |s| must be positive and less than 2048 (i.e.,
2) it must be less than $2↑{27}$ when considered as an integer).
2) The subroutine opens and closes a global file variable called |tfm_file|.
2) If an error is detected, an error message is issued and no font
2) information is stored.
2) @d bad_tfm=11 {label for |read_font_info|}
2) @d abort==goto bad_tfm {do this when the \.{TFM} data is wrong}
2) @p procedure read_font_info(@!u:user_font_code;
2) @!nom,@!aire:str_number; @!s:scaled); {input a \.{TFM} file}
2) label done,bad_tfm,not_found;
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/445L
1) @!g:internal_font_number; {the number to return}
1) @!a,@!b,@!c,@!d:eight_bits; {byte variables}
**** File 2) TEX.OLD[TEX,DEK]/31P/442L
2) @!a,@!b,@!c,@!d:eight_bits; {byte variables}
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/451L
1) begin g←undefined_font;@/
1) @<Read and check the font data; |abort| if the \.{TFM} file is
1) malformed; if there's no room for this font, say so and |goto
**** File 2) TEX.OLD[TEX,DEK]/31P/447L
2) begin @<Read and check the font data; |abort| if the \.{TFM} file is
2) malformed; if there's no room for this font, say so and |goto
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/456L
1) done: b_close(tfm_file); read_font_info←g;
1) end;
**** File 2) TEX.OLD[TEX,DEK]/31P/451L
2) done: b_close(tfm_file);
2) end;
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/466L
1) @d start_font_error_message==print_nl("! Font "); sprint_cs(u);
1) print_char("="); print_file_name(nom,aire,"");
**** File 2) TEX.OLD[TEX,DEK]/31P/461L
2) @d start_font_error_message==print_nl("! Font "); print_int(u);
2) print_char("="); print_file_name(nom,aire,"");
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/708L
1) if np≥7 then font_params[f]←np@+else font_params[f]←7;
**** File 2) TEX.OLD[TEX,DEK]/31P/703L
2) font_code[f]←u; font_number[u]←f;
2) if np≥7 then font_params[f]←np@+else font_params[f]←7;
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/715L
1) fmem_ptr←fmem_ptr+lf; font_ptr←f; g←f; goto done
1) @ Before we forget about the format of these tables, let's deal with two
1) of \TeX's basic scanning routines related to font information.
1) @<Declare procedures that scan font-related stuff@>=
1) procedure scan_font_ident;
1) var f:internal_font_number;
1) begin @<Get the next non-blank non-call...@>;
1) if cur_cmd=set_font then f←cur_chr
1) else begin print_nl("! Missing font identifier");
1) @.Undefined font code@>
1) help2("I was looking for a control sequence whose")@/
1) ("current meaning has been defined by \font.");
1) back_error; f←undefined_font;
1) end;
**** File 2) TEX.OLD[TEX,DEK]/31P/711L
2) fmem_ptr←fmem_ptr+lf; font_ptr←f; goto done
2) @ Before we forget about the format of these tables, let's deal with two
2) of \TeX's basic scanning routines related to font information.
2) @<Declare procedures that scan restricted classes of integers@>=
2) procedure scan_font_number;
2) var f:internal_font_number;
2) begin scan_int;
2) if (cur_val<0)∨(cur_val≥bad_font_code) then f←undefined_font
2) else f←font_number[cur_val];
2) if f=undefined_font then
2) begin print_nl("! Undefined font code");
2) @.Undefined font code@>
2) help3("Watch out---you must define a font code before you")@/
2) ("try to use the font, so you may have to start over.")@/
2) ("(Chapter 27 of the manual explains how to survive this.)");
2) int_error(cur_val);
2) end;
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/734L
1) @ The following routine is used to implement `\.{\\texinfo} |f| |n|'.
1) The boolean parameter |writing| is set |true| if the calling program
1) intends to change the parameter value.
1) @<Declare procedures that scan font-related stuff@>=
1) procedure scan_tex_info(@!writing:boolean);
**** File 2) TEX.OLD[TEX,DEK]/31P/733L
2) @ The following routine is used to implement `\.{\\texinfo} |m| |n|'. If
2) font |m| is undefined, no error message is needed since |scan_font_number|
2) will have already issued one.
2) The boolean parameter |writing| is set |true| if the calling program
2) intends to change the parameter value.
2) @<Declare procedures that scan restricted classes of integers@>=
2) procedure scan_tex_info(@!writing:boolean);
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/742L
1) begin scan_font_ident; f←cur_val; scan_int;
1) if f=undefined_font then cur_val←fmem_ptr {a harmless location}
**** File 2) TEX.OLD[TEX,DEK]/31P/744L
2) begin scan_font_number; f←cur_val; scan_int;
2) if f=undefined_font then cur_val←fmem_ptr {a harmless location}
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/761L
1) begin print_nl("! Font "); sprint_cs(font_ident[f]);
1) print(" has "); print_int(font_params[f]);
**** File 2) TEX.OLD[TEX,DEK]/31P/763L
2) begin print_nl("! Font "); print_int(font_code[f]);
2) print(" has "); print_int(font_params[f]);
***************
**** File 1) TEX.WEB[TEX,DEK]/31P/766L
1) ("use \texinfo immediately after the \font is loaded.");
1) error;
**** File 2) TEX.OLD[TEX,DEK]/31P/768L
2) ("use \texinfo immediately after the font code is defined.");
2) error;
***************
**** File 1) TEX.WEB[TEX,DEK]/47P/139L
1) help4("You have to specify a font identifier,")@/
1) ("before you can typeset characters or accents.")@/
**** File 2) TEX.OLD[TEX,DEK]/47P/139L
2) help4("You have to use `\:' to define the current font,")@/
2) ("before you can typeset characters or accents.")@/
***************
**** File 1) TEX.WEB[TEX,DEK]/51P/129L
1) set_font: define(cur_font_loc,data,cur_chr);
1) set_family: begin scan_four_bit_int; define(cur_fam_loc,data,cur_val);
**** File 2) TEX.OLD[TEX,DEK]/51P/129L
2) set_font: begin scan_font_number; define(cur_font_loc,data,cur_val);
2) end;
2) set_family: begin scan_four_bit_int; define(cur_fam_loc,data,cur_val);
***************
**** File 1) TEX.WEB[TEX,DEK]/51P/335L
1) scan_optional_equals; scan_font_ident; define(p,data,cur_val);
1) end;
**** File 2) TEX.OLD[TEX,DEK]/51P/336L
2) scan_optional_equals; scan_int;
2) if (cur_val≥bad_font_code)∨(cur_val<0) then n←undefined_font
2) else n←font_number[cur_val];
2) if n=undefined_font then
2) begin print_nl("! Font number "); print_int(cur_val);
2) @.Font number x has not...@>
2) print(" has not been defined");
2) help1("Proceed; I'm going to ignore this math font definition.");@/
2) error;
2) end
2) else define(p,data,n);
2) end;
***************
**** File 1) TEX.WEB[TEX,DEK]/51P/550L
1) def_font: new_font(a);
1) @ @<Declare the procedure called |new_font|@>=
1) procedure new_font(@!a:small_number);
1) label exit, common_ending;
1) var u:pointer; {user's font identifier}
1) @!s:scaled; {stated ``at'' size, or zero if none is stated}
**** File 2) TEX.OLD[TEX,DEK]/51P/561L
2) def_font: new_font;
2) @ @<Declare the procedure called |new_font|@>=
2) procedure new_font;
2) label exit;
2) var u:0..bad_font_code;
2) @!s:scaled; {stated ``at'' size, or zero if none is stated}
***************
**** File 1) TEX.WEB[TEX,DEK]/51P/561L
1) get_token;
1) if cs_ptr=0 then @<Complain about the missing control sequence and |return|@>;
1) u←cs_ptr; scan_optional_equals; scan_file_name;
1) @<Scan the ``at'' size specification@>;
1) @<If this font has already been loaded, set |f| to the internal
1) font number and |goto common_ending|@>;
1) f←read_font_info(u,cur_name,cur_area,s);
1) common_ending: define(u,set_font,f); font_ident[f]←u;
1) exit:end;
**** File 2) TEX.OLD[TEX,DEK]/51P/572L
2) scan_int;
2) if (cur_val<0)∨(cur_val≥bad_font_code) then
2) begin print_nl("! Invalid code ("); print_int(cur_val);
2) @.Invalid code@>
2) print("), should be in the range 0.."); print_int(bad_font_code-1);
2) help1("I'm going to use 0 instead of that illegal code value.");@/
2) error; cur_val←0;
2) end;
2) u←cur_val; scan_optional_equals; scan_file_name;
2) @<Scan the ``at'' size specification@>;
2) @<If font |u| is already defined, |return|, and issue an error message
2) if the previous definition was different@>;
2) @<If this font has already been loaded with another number,
2) make the two numbers essentially identical and |return|@>;
2) read_font_info(u,cur_name,cur_area,s);
2) exit:end;
***************
**** File 1) TEX.WEB[TEX,DEK]/51P/586L
1) @ When the user gives a new identifier to a font that was previously loaded,
1) the new value becomes the |font_ident| of record. Font names `\.{xyz}' and
1) `\.{XYZ}' are considered to be different.
1) @<If this font has already been loaded...@>=
1) for f←font_base+1 to font_ptr do
**** File 2) TEX.OLD[TEX,DEK]/51P/604L
2) @ @<If font |u| is already defined,...@>=
2) if font_number[u]≠undefined_font then
2) begin f←font_number[u];
2) if ((s=0)∧(font_size[f]≠font_dsize[f]))∨
2) ((s≠0)∧(s≠font_size[f]))∨@|
2) ¬ str_eq_str(font_name[f],cur_name)∨@|
2) ¬ str_eq_str(font_area[f],cur_area) then
2) @<Inform the user that font |u| was already defined differently@>;
2) return;
2) end
2) @ @<Inform the user that font |u| was already defined differently@>=
2) begin print_nl("! Font "); print_int(u); print(" is already defined to be ");
2) @.Font x is already defined...@>
2) print(font_name[f]);
2) if font_size[f]≠font_dsize[f] then
2) begin print(" at ");
2) print_scaled(font_size[f]);
2) print("pt");
2) end;
2) help2("I can't change a font code that has already been used,")@/
2) ("so I'll stick with the previous specification.");
2) error;
2) end
2) @ When the user gives a new code number to a loaded font, the new value becomes
2) the |font_code| of record.
2) @<If this font has already been loaded with another number,...@>=
2) for f←font_base+1 to font_ptr do
***************
**** File 1) TEX.WEB[TEX,DEK]/51P/595L
1) goto common_ending
1) @ @<Complain about the missing control sequence and |return|@>=
1) begin print_nl("! A font identifier must be a control sequence");
1) @.A font identifier...@>
1) help2("You should say, e.g., `\font\f=fontfilename'.")@/
1) ("(I'm going to ignore the \font command you just gave.)");
1) back_error; return;
1) end
1) @ @<Cases of |print_cmd_chr|...@>=
1) set_font:begin print("select font "); print(font_name[chr_code]);
1) if font_size[chr_code]≠font_dsize[chr_code] then
1) begin print(" at "); print_scaled(font_size[chr_code]);
1) print("pt");
1) end;
1) end;
1) @ @<Put each...@>=
**** File 2) TEX.OLD[TEX,DEK]/51P/637L
2) begin font_number[u]←f; font_code[f]←u; return;
2) end
2) @ @<Put each...@>=
***************
**** File 1) TEX.WEB[TEX,DEK]/52P/310L
1) @ @<Dump the font information@>=
1) dump_int(fmem_ptr);
**** File 2) TEX.OLD[TEX,DEK]/52P/310L
2) @ The (slightly) interesting thing about font information, as far as
2) dumping is concerned, is that several user font codes might be associated
2) with the same internal font number.
2) @<Dump the font information@>=
2) dump_int(fmem_ptr);
***************
**** File 1) TEX.WEB[TEX,DEK]/52P/316L
1) print_ln; print_int(fmem_ptr-7); print(" words of font info for ");
**** File 2) TEX.OLD[TEX,DEK]/52P/320L
2) for k←0 to bad_font_code-1 do
2) if (font_number[k]≠undefined_font)∧(font_code[font_number[k]]≠k) then
2) begin dump_int(font_number[k]); dump_int(k);
2) end;
2) dump_int(undefined_font);@/
2) print_ln; print_int(fmem_ptr-7); print(" words of font info for ");
***************
**** File 1) TEX.WEB[TEX,DEK]/52P/325L
1) @<Undump the array info for internal font number |k|@>
1) @ @<Dump the array info for internal font number |k|@>=
1) begin dump_int(font_ident[k]);
1) dump_qqqq(font_check[k]);
**** File 2) TEX.OLD[TEX,DEK]/52P/334L
2) @<Undump the array info for internal font number |k|@>;
2) repeat undump_int(y);
2) if eof(fmt_file) then goto bad_fmt;
2) if y≠undefined_font then
2) begin if (y<undefined_font)∨(y≥font_ptr) then goto bad_fmt;
2) undump(0)(bad_font_code)(k);
2) font_number[k]←y;
2) end;
2) until y=undefined_font
2) @ @<Dump the array info for internal font number |k|@>=
2) begin dump_int(font_code[k]);
2) dump_qqqq(font_check[k]);
***************
**** File 1) TEX.WEB[TEX,DEK]/52P/347L
1) print_nl("\font"); sprint_cs(font_ident[k]); print_char("=");
1) print_file_name(font_name[k],font_area[k],"");
**** File 2) TEX.OLD[TEX,DEK]/52P/364L
2) print_nl("\font "); print_int(font_code[k]); print_char("=");
2) print_file_name(font_name[k],font_area[k],"");
***************
**** File 1) TEX.WEB[TEX,DEK]/52P/355L
1) begin undump(single_base)(undefined_control_sequence)(font_ident[k]);
1) undump_qqqq(font_check[k]);@/
**** File 2) TEX.OLD[TEX,DEK]/52P/372L
2) begin undump(0)(bad_font_code)(font_code[k]); font_number[font_code[k]]←k;
2) undump_qqqq(font_check[k]);@/
***************